package com.demo.core.dao.base.support;

import org.springframework.util.Assert;

/**
 * 提供高效分页参数支持
 * ①、分页的关键参数:第一条数据位置和最大检索条数
 * ②、增加 分页的排序功能;
 * 		排序实现了对指定列进行排序,并且数据根据配需字段进行分页. at 2012-07-02 add by ryuu.kk  
 * @author ryuu.kk
 *
 */
public class SearchArgumentSupport implements java.io.Serializable {
	
	/**
	 * 版本序列化ID
	 */
	private static final long serialVersionUID = -3394155648118192005L;

	/**
	 * 检索参数构造函数。
	 * 创建一个检索参与模型。
	 * 其中firstResult是检索结果的第一条数据在整个结果集的位置；
	 * maxResults是检索结果范围。
	 * @param firstResult 检索结果的第一条数据在整个结果集的位置
	 * @param maxResults 检索结果范围
	 */
	public SearchArgumentSupport(int firstResult, int maxResults) {
		Assert.isTrue(maxResults >= 0, "The 'maxResults' argument " +
				"must not be negative.");
		Assert.isTrue(firstResult >= 0, "The 'firstResult' argument " +
				"must not be negative");
		this.firstResult = firstResult;
		this.maxResults = maxResults;
	}
	/**
	 * 当前条数位置
	 */
	private int firstResult;
	/**
	 * 最大结果集条数
	 */
	private int maxResults;
	
	/**
	 * Order排序字段
	 */
	private String[] orders;
	
	/**
	 * 取得检索结果的第一天数据在整个结果集的位置
	 * @return 当前位置
	 */
	public int getFirstResult() {
		return firstResult;
	}
	public void setFirstResult(int firstResult) {
		this.firstResult = firstResult;
	}
	/**
	 * 取得检索结果范围
	 * @return 最大条数
	 */
	public int getMaxResults() {
		return maxResults;
	}
	public void setMaxResults(int maxResults) {
		this.maxResults = maxResults;
	}
	
	//排序字段: ID DESC;NAME ASC...
	public String[] getOrders() {
		return orders;
	}
	public void setOrders(String[] orders) {
		this.orders = orders;
	}
	
	@Override
	public int hashCode() {
		
		int code = 31;
		code ^= (firstResult + 1) * 31;
		code ^= (maxResults + 1)* 31;
		if (orders != null) {
			for (String s : orders) {
				code ^= s.hashCode();
			}
		} else {
			code ^= 0;
		}
		return code;
	}
}
